/**
 * @PROJECT_NAME design_patterns
 * @DESCRIPTION 工厂方法模式
 * 定义一个创建对象的接口，让子类决定实例化那个产品类对象，工厂方法使一个产品类的实例化延迟到其他工厂的子类中。工厂模式完全遵循开闭原则。
 * <p>
 * 抽象工厂（Abstract Factory）：提供了创建产品的接口，调用者通过它访问具体工厂的工厂方法来创建产品。
 * <p>
 * 具体工厂（Concrete Factory）：主要是实现抽象工厂中的抽象方法，完成具有产品的创建。
 * <p>
 * 抽象产品(Abstract Product)：定义了产品的规范，描述了产品的主要特征与性能。
 * <p>
 * 具体产品(Concrete Product)：实现了抽象产品角色所定义的接口，由具体工厂来创建，它同具体工厂之间一一对应。
 * <p>
 * 优点：
 * <p>
 * 用户只需要知道具体工厂的名称就可以得到所需要的的产品，无需知道产品的具体创建过程
 * 在系统增加产品时只需要添加具体产品类和对应具体工厂类，无须对原工厂进行任何修改，满足开闭原则。
 * <p>
 * 缺点：
 * 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类，这增加了系统的复杂度。
 * @AUTHOR CNBruceLee
 * @DATE 2021/7/11 8:45
 */
package com.bruce.demo2.patterns.demo1.creational.demo02.factoryMethod.demo5;
